]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
iconGrid: Add minRows/minColumns properties
authorCarlos Soriano <carlos.soriano89@gmail.com>
Tue, 27 Aug 2013 19:23:13 +0000 (21:23 +0200)
committerCarlos Soriano <carlos.soriano89@gmail.com>
Mon, 2 Sep 2013 17:43:49 +0000 (19:43 +0200)
When we adapt the grid to different display sizes,
we don't want the number of displayed items to get
too small. In the future we will scale down icons to
make sure that the grid fits add least minRows
x minColumns items, but for now we only take the
properties into account when calculating the dynamic spacing.

https://bugzilla.gnome.org/show_bug.cgi?id=706081

js/ui/appDisplay.js
js/ui/iconGrid.js

index 30d033ceaed87ce20e6491ab566935d23457e163..0dd388502cb5b6cb6992c67615614b586b7b6841 100644 (file)
@@ -30,6 +30,8 @@ const Util = imports.misc.util;
 const MAX_APPLICATION_WORK_MILLIS = 75;
 const MENU_POPUP_TIMEOUT = 600;
 const MAX_COLUMNS = 6;
+const MIN_COLUMNS = 4;
+const MIN_ROWS = 4;
 
 const INACTIVE_GRID_OPACITY = 77;
 const INACTIVE_GRID_OPACITY_ANIMATION_TIME = 0.15;
@@ -63,6 +65,8 @@ const BaseAppView = new Lang.Class({
     _init: function(params, gridParams) {
         gridParams = Params.parse(gridParams, { xAlign: St.Align.MIDDLE,
                                                 columnLimit: MAX_COLUMNS,
+                                                minRows: MIN_ROWS,
+                                                minColumns: MIN_COLUMNS,
                                                 fillParent: false });
         params = Params.parse(params, { usePagination: false });
 
index 59c6360d09834579a0cdca9bde8b70c1ef5ef521..fa04bf877ea0966b46a657e3aa9cc29a85405349 100644 (file)
@@ -176,10 +176,14 @@ const IconGrid = new Lang.Class({
     _init: function(params) {
         params = Params.parse(params, { rowLimit: null,
                                         columnLimit: null,
+                                        minRows: 1,
+                                        minColumns: 1,
                                         fillParent: false,
                                         xAlign: St.Align.MIDDLE });
         this._rowLimit = params.rowLimit;
         this._colLimit = params.columnLimit;
+        this._minRows = params.minRows;
+        this._minColumns = params.minColumns;
         this._xAlign = params.xAlign;
         this._fillParent = params.fillParent;
 
@@ -393,17 +397,27 @@ const IconGrid = new Lang.Class({
      * This function must to be called before iconGrid allocation,
      * to know how much spacing can the grid has
      */
-    updateSpacingForSize: function(availWidth) {
-        let spacing = this._spacing;
-
-        if (this._colLimit) {
-            let itemWidth = this._hItemSize * this._colLimit;
-            let emptyArea = availWidth - itemWidth;
-            spacing = Math.max(spacing, emptyArea / (2 * this._colLimit));
-            spacing = Math.round(spacing);
-        }
-        this.setSpacing(spacing);
-    },
+    updateSpacingForSize: function(availWidth, availHeight) {
+        let maxEmptyVArea = availHeight - this._minRows * this._vItemSize;
+        let maxEmptyHArea = availWidth - this._minColumns * this._hItemSize;
+        let maxHSpacing, maxVSpacing;
+        if (this._minRows <= 1)
+            maxVSpacing = maxEmptyVArea;
+        else
+            maxVSpacing = Math.floor(maxEmptyVArea / (this._minRows - 1));
+
+        if (this._minColumns <= 1)
+            maxHSpacing = maxEmptyHArea;
+        else
+            maxHSpacing = Math.floor(maxEmptyHArea / (this._minColumns - 1));
+
+        let maxSpacing = Math.min(maxHSpacing, maxVSpacing);
+        // Limit spacing to the item size
+        maxSpacing = Math.min(maxSpacing, Math.min(this._vItemSize, this._hItemSize));
+        // The minimum spacing, regardless of whether it satisfies the row/column minima,
+        // is the spacing we get from CSS.
+        this.setSpacing(Math.max(this._spacing, maxSpacing));
+    }
 });
 
 const PaginatedIconGrid = new Lang.Class({